﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class ThongKe_frmBieumau14 : System.Web.UI.Page
{


    BieumauDataContext _db = new BieumauDataContext();
  //  string _maDonVi = "";
    int _nam = 0;
    protected void Page_Load(object sender, EventArgs e)
    {

        try
        {
            _nam = Convert.ToInt32(Request.QueryString["nam"].ToString().Trim());
        }
        catch { }
        //if (Session["MaDonVi"] != null)
        //{

        if (_nam != 0)
        {
            lblNam.Text = (_nam) + "";
        }
        else
        {
            lblNam.Text = (DateTime.Now.Year - 1) + "";

        }
          //  _maDonVi = Session["MaDonVi"].ToString();
            //lblDonViBaoCao.Text = ((tblDoanhNghiepTuNhan)_db.tblDoanhNghiepTuNhans.Single(p => p.MaDoanhNghiep == _maDonVi)).TenDoanhNghiep;
            lblDonViBaoCao.Text = ((tblCoQuanNhaNuoc)_db.tblCoQuanNhaNuocs.Single(p => p.MaCoQuan == "1")).TenCoQuan;
            if (!IsPostBack)
            {
                loadDonViBaoCao();
                loadDuLieu();
            }
        //}
        //else
        //{
        //    Response.Write("<script language='JavaScript'> alert('Bạn chưa đăng nhập (hoặc hết thời gian đăng nhập). Yêu cầu đăng nhập (lại) !'); </script>");
        //    Response.AddHeader("REFRESH", "0;URL=GioiThieu_DoanhNghiep.aspx");
        //}
    }

    // load dữ liệu cũ lên page
    void loadDuLieu()
    {
        try
        {
            tblBieuMau bm = null;
            if (_nam != 0)
            {
                bm = _db.tblBieuMaus.Single(p => p.MaDonVi == "1"
                                                           && p.NamBaoCao == _nam
                                                           && p.TenBieuMau == "BM_14");
            }
            else
            {
                bm = _db.tblBieuMaus.Single(p => p.MaDonVi == "1"
                                                           && p.NamBaoCao == DateTime.Now.Year-1
                                                           && p.TenBieuMau == "BM_14");
            }

            dropDonViNhanBaoCao.Text = bm.NoiNhan;
            string _dulieu = bm.DuLieu;
            string[] _arrDuLieuTach = _dulieu.Split('~');
            txtNguoiLapBieu.Text = _arrDuLieuTach[0];
            txtGiamDoc.Text = _arrDuLieuTach[1];
            txtDiaDiemKy.Text = _arrDuLieuTach[2];
            txtChiaTheoNganhKinhTe.Text = _arrDuLieuTach[_arrDuLieuTach.Length - 1];

            // thuật toán điền dữ liệu lên bảng
            dienDuLieuLenPage(8, 2, "txt", _arrDuLieuTach, 1);

            if (bm.DaNop == true)  // nếu nộp rồi thì khóa
            {
                //duyetAllTextBox(8, 2, "txt", "khoa");
                //btnNop.Enabled = false;
                duyetAllTextBox(8, 2, "txt", "backcolor");
                lblNgayGui.Text = ((DateTime)bm.NgayNop).ToShortDateString();
                txtNgayKy.Text = ((DateTime)bm.NgayNop).Day.ToString();
                txtThangKy.Text = ((DateTime)bm.NgayNop).Month.ToString();
                txtNamKy.Text = ((DateTime)bm.NgayNop).Year.ToString();
            }
            else // chưa nộp thì set background cho phép sửa
            {
                duyetAllTextBox(8, 2, "txt", "backcolor");
                btnNop.Enabled = true;
            }
           
        }
        catch (Exception ex)
        {
            duyetAllTextBox(8, 2, "txt", "backcolor");
            btnNop.Enabled = true;
        }
    }

    private void duyetAllTextBox(int _soDong, int _soCot, string _tenGocControl, string lenh)
    {
        txtNgayKy.BackColor = System.Drawing.Color.FromArgb(255, 255, 255);
        txtThangKy.BackColor = System.Drawing.Color.FromArgb(255, 255, 255);
        txtNamKy.BackColor = System.Drawing.Color.FromArgb(255, 255, 255);
        if (lenh.Equals("khoa")) // neu lenh là khóa thì khóa
        {
            // đầu tiên khóa các Control phụ
            dropDonViNhanBaoCao.Enabled = false;  dropDonViNhanBaoCao.ForeColor = System.Drawing.Color.Black;
            txtNguoiLapBieu.ReadOnly = true;
            txtGiamDoc.ReadOnly = true;
            txtDiaDiemKy.ReadOnly = true;
            txtChiaTheoNganhKinhTe.ReadOnly = true;
            dropDonViNhanBaoCao.BackColor = System.Drawing.Color.FromArgb(255, 255, 255);
            txtNguoiLapBieu.BackColor = System.Drawing.Color.FromArgb(255, 255, 255);
            txtGiamDoc.BackColor = System.Drawing.Color.FromArgb(255, 255, 255);
            txtDiaDiemKy.BackColor = System.Drawing.Color.FromArgb(255, 255, 255);
            txtChiaTheoNganhKinhTe.BackColor = System.Drawing.Color.FromArgb(255, 255, 255);

        }

        if (lenh.Equals("backcolor")) // neu la lenh back thi set back cho nó
        {
            // đầu tiên set back các Control phụ
            dropDonViNhanBaoCao.BackColor = System.Drawing.Color.FromArgb(255, 255, 204);
            txtNguoiLapBieu.BackColor = System.Drawing.Color.FromArgb(255, 255, 204);
            txtGiamDoc.BackColor = System.Drawing.Color.FromArgb(255, 255, 204);
            txtDiaDiemKy.BackColor = System.Drawing.Color.FromArgb(255, 255, 204);
            txtChiaTheoNganhKinhTe.BackColor = System.Drawing.Color.FromArgb(255, 255, 204);
        }

        // duyet tat các textbox trong bảng
        TextBox tx = null;
        string _tenControl = "", _tenControlTheoDong = "";
        for (int i = 1; i <= _soDong; i++) // vòng lap các dòng
        {
            _tenControlTheoDong = _tenGocControl + i.ToString("D2") + "_"; // lúc này tên control có dạng txt01_
            for (int j = 1; j <= _soCot; j++) // vong lap các cột
            {
                _tenControl = "";// reset lai ten control
                _tenControl = _tenControlTheoDong + j;  // lúc này tên control có dạng txt01_1 
                tx = null; // reset lai bien giữ textbox
                tx = form.FindControl(_tenControl) as TextBox; // tìm textbox với tên đã lấy được
                if (lenh.Equals("khoa"))
                {
                    tx.ReadOnly = true;
                    tx.BackColor = System.Drawing.Color.FromArgb(255, 255, 255);
                }
                if (lenh.Equals("backcolor"))
                    tx.BackColor = System.Drawing.Color.FromArgb(255, 255, 204);

            }
        } // het for

    }

    // thuật toán điền dữ liệu lên các dòng - cột
    private void dienDuLieuLenPage(int _soDong, int _soCot, string _tenGocControl, string[] _duLieuNguon, int _dongBatDau)
    {
        TextBox tx = null;
        string _tenControl = "", _tenControlTheoDong = "";
        string[] _arrDuLieuTungDong;
        for (int i = 1; i <= _soDong; i++) // vòng lap các dòng
        {
            _arrDuLieuTungDong = _duLieuNguon[_dongBatDau + 2].Split('-');
            _tenControlTheoDong = _tenGocControl + i.ToString("D2") + "_"; // lúc này tên control có dạng txt01_
            for (int j = 1; j <= _soCot; j++) // vong lap các cột
            {
                _tenControl = "";// reset lai ten control
                _tenControl = _tenControlTheoDong + j;  // lúc này tên control có dạng txt01_1 
                tx = null; // reset lai bien giữ textbox
                tx = form.FindControl(_tenControl) as TextBox; // tìm textbox với tên đã lấy được
                tx.Text = _arrDuLieuTungDong[j - 1];
            }
            _dongBatDau++;
        }
    }

    void loadDonViBaoCao()
    {
        var _loadDVNhan = from dvn in _db.tblDonViNhans
                          select dvn;
        dropDonViNhanBaoCao.Items.Clear();
        dropDonViNhanBaoCao.Items.Add("Xin chọn đơn vị");
        foreach (tblDonViNhan dvn in _loadDVNhan)
        {
            dropDonViNhanBaoCao.Items.Add(dvn.TenDonViNhan);
        }

    }

    // thuật toán lấy dữ liệu từ textbox trên page
    private string layDuLieuTrenPage(int _soDong, int _soCot, string _tenGocControl)
    {
        TextBox tx = null;
        string _tenControl = "", _duLieu = "", _tenControlTheoDong = "";
        for (int i = 1; i <= _soDong; i++) // vòng lap các dòng
        {
            _tenControlTheoDong = _tenGocControl + i.ToString("D2") + "_"; // lúc này tên control có dạng txt01_
            for (int j = 1; j <= _soCot; j++) // vong lap các cột
            {
                _tenControl = "";// reset lai ten control
                _tenControl = _tenControlTheoDong + j;  // lúc này tên control có dạng txt01_1 
                tx = null; // reset lai bien giữ textbox
                tx = form.FindControl(_tenControl) as TextBox; // tìm textbox với tên đã lấy được
                _duLieu += tx.Text;
                if ((j + 1) > _soCot)
                    break;
                _duLieu += "-";
            }
            if ((i + 1) > _soDong)
                break;
            _duLieu += "~";
        }
        return _duLieu; // return về 1 chuỗi chứa dữ liệu hàng - cột dạng: " 1-2-3-4-5 , 6-7-8-9-10 " 
    }

    protected void btnNop_Click(object sender, EventArgs e)
    {
        if (dropDonViNhanBaoCao.SelectedItem.ToString().Equals("Xin chọn đơn vị"))
        {
            Response.Write("<script language='JavaScript'> alert('Hãy chọn đơn vị nhận báo cáo'); </script>");
            return;
        }
        if (KiemTra.isEmpty_TextBox(txtNguoiLapBieu))
        {
            Response.Write("<script language='JavaScript'> alert('Hãy nhập người lập biểu'); </script>");
            return;
        }
        if (KiemTra.isEmpty_TextBox(txtDiaDiemKy))
        {
            Response.Write("<script language='JavaScript'> alert('Hãy nhập địa điểm lập biểu'); </script>");
            return;
        }

        if (KiemTra.isEmpty_TextBox(txtGiamDoc))
        {
            Response.Write("<script language='JavaScript'> alert('Hãy nhập tên Giám đốc đơn vị'); </script>");
            return;
        }

        string _dulieu = "";
        _dulieu += txtNguoiLapBieu.Text + "~" + txtGiamDoc.Text + "~" + txtDiaDiemKy.Text + "~";
        _dulieu += layDuLieuTrenPage(8, 2, "txt");
        _dulieu += "~";
        _dulieu += txtChiaTheoNganhKinhTe.Text.Replace(',', '/');



        try // mặc định là insert. trong quá trình insert nếu báo lỗi thì nó xuống catch và thành update
        {
            tblBieuMau bm = new tblBieuMau();
            bm.MaDonVi = "1";
            bm.NamBaoCao = DateTime.Now.Year-1;
            bm.NoiNhan = dropDonViNhanBaoCao.SelectedItem.ToString();
            bm.DaNop = false;
            bm.TenBieuMau = "BM_14";
            bm.DuLieu = _dulieu;

            if (!_db.tblBieuMaus.Contains(bm))
                _db.tblBieuMaus.InsertOnSubmit(bm);
            else
                throw new Exception("Đã có roi");

            _db.SubmitChanges();
            Response.Write("<script language='JavaScript'> alert('Thêm dữ liệu cho biểu mẫu 14 thành công'); </script>");

        } // hết try
        catch (Exception ex)
        {
            // nếu trùng mã thì có rồi nên nhảy xuống đây update
            // lọc ra biểu mẫu để tiến hành update
            tblBieuMau bm2 = _db.tblBieuMaus.Single(p => p.MaDonVi == "1"
                                                   && p.NamBaoCao == DateTime.Now.Year-1
                                                   && p.TenBieuMau == "BM_14");

            bm2.NoiNhan = dropDonViNhanBaoCao.SelectedItem.ToString();
            bm2.DuLieu = _dulieu;

            _db.SubmitChanges();

            Response.Write("<script language='JavaScript'> alert('Cập nhật dữ liệu cho biểu mẫu 14 thành công'); </script>");

        } // hết catch
        finally
        {
            string url_refresh = Request.Url.AbsolutePath;
            Response.AddHeader("REFRESH", "0;URL=" + url_refresh);
        }
    }
}